//
//  CZUserViewModel.swift
//  sinaSwifWeiBo
//
//  Created by 张雪雪 on 16/2/28.
//  Copyright © 2016年 张雪雪. All rights reserved.
//

import UIKit
import AFNetworking


class CZUserViewModel: NSObject {
    
    //MARK :用code换取Token
    //先定义一个Token的方法
    
    //swift的单例
    static let shareInstance = CZUserViewModel()
    
    //给这个model 赋值
    
    var model:  CZUserModel?
    //access_token ,进行使用
    // 实现了属性的方法 get 方法
    // get 方法的属性 -> 计算型属性
    
    
    var access_token: String? {
    
    
    return model?.access_token
    
    }
    
    //定义一个属性来判断是否登陆成功
    
    var isLogin: Bool? {
    
    
        return model?.access_token != nil ? true : false
    
    }
    
    override init() {
        
        model = CZUserModel.readObject("infoo.plist")
    }
    
    //通过load来换取token
    
    func loadToken(code: String ,success: () -> (),failure:() -> ()){
        
        //给这个model 赋值
        //var model: CZUserModel?

        //先实例化一个manager
        let afn = AFHTTPSessionManager()
        //修改afn 的接受类型
        /*
        类型不匹配
        NSLocalizedDescription=Request failed: unacceptable content-type: text/plain}
        */
        
        //MARK:修改afn 的接受类型
        
        afn.responseSerializer.acceptableContentTypes?.insert("text/plain")
        /**
         client_id	true	string	申请应用时分配的AppKey。
         client_secret	true	string	申请应用时分配的AppSecret。
         grant_type	true	string	请求的类型，填写authorization_code
         
         grant_type为authorization_code时
         必选	类型及范围	说明
         code	true	string	调用authorize获得的code值。
         redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致。
         */
         //拼接参数
        
        let params = ["client_id":App_KEY,
            "client_secret":App_SECERT,
            "grant_type":"authorization_code",
            "code":code,
            "redirect_uri":App_URL
            
        ]
        //建议大家打印一下参数,方便查看参数是否真正确
        
       // print(params)
        
        //发送一个post 的请求
        
        afn.POST("https://api.weibo.com/oauth2/access_token", parameters: params, progress: nil, success: { (_, JSON) -> Void in
            //                print(JSON)
            //字典转模型
            //let JSON: AnyObject? -> [String : NSObject]
            
            if let Odic = JSON as? [String : NSObject] {
                
                //强制解包会崩溃
                 let userModel = CZUserModel(dic: Odic)
                
//                print(userModel.access_token)
                
                //请求获取个人信息
                
                self.getPersoneInfo(userModel, success: success, failure: failure)
                
            }
            
            
            }) { (_, error) -> Void in
                print(error)
                
                failure()
        }
        
        
        
    }

    //MARK:--通过Token 来获取用户信息
    
    func getPersoneInfo(userModel:CZUserModel ,success : () -> () ,failure: () -> ()){
        //先实例化一个manager
        let afn = AFHTTPSessionManager()
        
        //拼接参数
        /*
        access_token	true	string	采用OAuth授权方式为必填参数，OAuth授权后获得。
        uid	false	int64	需要查询的用户ID。
        screen_name	false	string	需要查询的用户昵称。
        
        */
        
        let params = ["access_token":userModel.access_token ?? "",
            "uid":userModel.uid ?? ""]
        
//        print(params)
        
        //发送get请求
        
        afn.GET("https://api.weibo.com/2/users/show.json", parameters: params, progress: nil , success: { (_ , JSON ) -> Void in
//            print(JSON)
            
            if let dic = JSON as? [String : NSObject]{
                
                userModel.profile_image_url = dic["profile_image_url"] as? String
                
                
                userModel.screen_name = dic["screen_name"] as? String
                
                //            let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
                //
                //                //拼接文件路径
                //
                //                let filePath = (path as NSString).stringByAppendingPathComponent("info.text")
                //
                //
                //                NSKeyedArchiver.archiveRootObject(userModel, toFile: filePath)
                //
                userModel.save("infoo.plist")
                
                //成功会hui调
                success()
                
                
            }
            
            
            }) { (_ , error ) -> Void in
                
                print(error)
                //失败的处理
                
                failure()
                
        }
        
    }
    
    

}
